/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2022-09-15
 * Time:22:37
 */

/*作业标题(2152)
请完成以下多线程编程：顺序打印
作业内容

有三个线程，线程名称分别为：a，b，c。

每个线程打印自己的名称。


需要让他们同时启动，并按 c，b，a的顺序打印
*/

public class Demo2 {
    public static void main(String[] args) throws InterruptedException {
        // 专门准备一个对象, 保证等待和通知是同一个对象
        Object object = new Object();

        // 第一个线程, 进行 a 操作.
        Thread a = new Thread(() -> {
                synchronized (object) {
                    try {
                        object.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("a");
                }

        });
        a.start();

        Thread.sleep(500);

        Thread b = new Thread(() -> {
                synchronized (object) {
                    System.out.println("b");
                }

                try {
                    object.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
        });
        b.start();
        Thread.sleep(500);

        // 第二个线程, 进行 notify
        Thread c = new Thread(() -> {
                synchronized (object) {
                    object.notify();
                    System.out.println("c");
                }

                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
        });
        c.start();
    }

}
